const float pi = 3.1415926536;

out vec4 fragColor;
uniform vec3 iResolution;
uniform float iTime;
uniform sampler2D iChannel0;

void main() {
    // 获取当前片段的屏幕坐标
    vec2 fragCoord = gl_FragCoord.xy;
    vec2 P = fragCoord.xy / iResolution.xy; // 归一化到 [0, 1] 范围
    float theta = (1.0 - P.y) * pi;        // 极角 theta
    float phi = P.x * pi * 2.0;            // 方位角 phi

    // 动画效果
    phi += iTime;

    // 将球面坐标转换为方向向量
    vec3 dir = vec3(
        sin(theta) * sin(phi), // x 分量
        cos(theta),            // y 分量
        sin(theta) * cos(phi)  // z 分量
    );

    // 将方向向量映射到纹理坐标
    vec2 texCoords = dir.xy * 0.5 + 0.5; // 将 [-1, 1] 映射到 [0, 1]

    // 使用纹理采样器获取颜色，并取平方根
    vec4 texColor = texture(iChannel0, texCoords);
    fragColor = sqrt(texColor); // 对颜色值进行伽马校正
}